<?php
/*
	Copyright 2006-2007 Open Technology LTD http://www.opentechnology.ru
	Authors: Alex Djachenko
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/


/**
 * Установить или обновить модуль
 *
 * @param string имя модуля
 */
function setup_mod_install($this_mod)
{
	// Загружаем информацию об установленных модулях
	// Получаем информацию из файла modinfo.php
	$this_mod_info_file = mst_loadinfomod($this_mod);
	// Получаем информацию из реестра установленных модулей
	$this_mod_info_reg = setup_infomod_get($this_mod);
	$date = date('Y-m-d H:i:s');
	// Переменная с результатом выполнения
	$res = null;
	// Проверяем версию модуля
	if (empty($this_mod_info_reg))
	{	// Модуль не установлен
		setup_echo("\n{$date}\nНачинаем установку модуля ({$this_mod}) версия ({$this_mod_info_file['ver']})\n");
		if (mst_modpath($this_mod,'setup/install.php',true))
    	{
        	// Скрипт существует
        	mst_modfileload($this_mod,'setup/install.php',null,true,true);
    	}else 
    	{
        	setup_echo("Скрипт установки отсутствует\n");
    	}
    	setup_echo("Установка модуля  ({$this_mod}) завершена\n");
    	$res = 'install';
	}elseif ($this_mod_info_file['ver'] > $this_mod_info_reg['ver'])
	{	// Модуль устарел
		setup_echo("\n{$date}\nНачинаем обновление модуля ({$this_mod}) с версии "
			."({$this_mod_info_reg['ver']}) до версии ({$this_mod_info_file['ver']})\n");
		if (mst_modpath($this_mod,'setup/upgrade.php',true))
    	{
        	// Скрипт существует
        	mst_modfileload($this_mod,'setup/upgrade.php',array('current_version'=>$this_mod_info_reg['ver'],'new_version'=>$this_mod_info_file['ver']),true,true);
    	}else 
    	{
        	setup_echo("Скрипт обновления отсутствует\n");
    	}
    	setup_echo("Обновление модуля  ({$this_mod}) завершено\n");
    	$res = 'upgrade';		
	}elseif ($this_mod_info_file['ver'] < $this_mod_info_reg['ver'])
	{
		// Установленный модуль более старый, чем зарегистрированный в реестре
		mst_error('Устаревший модуль',"Версия файлов модуля {$this_mod} младше "
		." версии, занесенной в реестр установленных модулей.");
		setup_echo("Устаревший модуль. Версия файлов модуля {$this_mod} младше "
		." версии, занесенной в реестр установленных модулей.\n",'error');
		$res = 'error';
	}else
	{
		// Установлена текущая версия: ничего делать не надо
        setup_echo("Модуль ({$this_mod}) версия ({$this_mod_info_file['ver']}) уже установлен.\n");
		$res = 'nothing';
	}
	// Сохраняем в реестр новую версию модуля
	setup_infomod_set($this_mod,array('ver'=>$this_mod_info_file['ver']),true);
	return $res;
}

/**
 * Удалить модуль
 *
 * @param string имя модуля
 */
function setup_mod_delete($this_mod)
{
	// Загружаем информацию об установленных модулях
	// Получаем информацию из файла modinfo.php
	$this_mod_info_file = mst_loadinfomod($this_mod);
	// Получаем информацию из реестра установленных модулей
	$this_mod_info_reg = setup_infomod_get($this_mod);
	$date = date('Y-m-d H:i:s');
	setup_echo("\n{$date}\nНачинаем удаление модуля ({$this_mod}) версия ({$this_mod_info_file['ver']})\n");
	// Проверяем версию модуля
	if (empty($this_mod_info_reg))
	{	// Модуль не установлен
		setup_echo("\n{$date}\nМодуль ({$this_mod}) не установлен\n");
		return false;
	}elseif ($this_mod_info_file['ver'] != $this_mod_info_reg['ver'])
	{	// Не совпадают версии модулей
		setup_echo("\n{$date}\nЗарегистрированная версия модуля ({$this_mod}) "
			."({$this_mod_info_reg['ver']}) не совпадает с версией файлов модуля  ({$this_mod_info_file['ver']})\n");
		mst_error('Несоответствие версий модулей',"Зарегистрированная версия модуля ({$this_mod}) "
		."({$this_mod_info_reg['ver']}) не совпадает с версией файлов модуля  ({$this_mod_info_file['ver']})");
		return false;
			
	}else
	{
		setup_echo("\n{$date}\nНачинаем удаление модуля ({$this_mod}) версии "
			."({$this_mod_info_reg['ver']})\n");
		if (mst_modpath($this_mod,'setup/uninstall.php',true))
    	{
        	// Скрипт существует
        	mst_modfileload($this_mod,'setup/uninstall.php',null,true,true);
    	}else 
    	{
        	setup_echo("Скрипт удаления отсутствует\n");
    	}
    	setup_infomod_unset($this_mod,true); 
    	setup_echo("Удаление модуля  ({$this_mod}) завершено\n");		
		return true;
	}
	// Сюда мы никак не можем попасть
	return false;
}
?>